package mapControl;

import java.util.LinkedList;
import java.util.List;

import net.datastructures.NodePositionList;
import net.datastructures.Position;
import net.datastructures.PositionList;
import powerUp.PowerUp;
import wallFactory.builders.WallBox;
import elementos.Bomba;
import elementos.Elemento;
import elementos.Player;
import enemies.Enemy;

public class Celda {

	protected Bomba bomba;

	private int col;

	protected WallBox desWallBox;

	protected List<Enemy> enemies;

	private String name;
	protected WallBox nonDesWallBox;
	protected Player player;
	protected PowerUp powerUp;
	private int row;

	/**
	 * @param row
	 * @param col
	 */
	public Celda(int row, int col) {
		super();
		this.row = row;
		this.col = col;
		name = "[" + row + "," + col + "]";
		enemies = new LinkedList<Enemy>();

	}

	
	/** Agrega un enemigo
	 * @param e
	 */
	public void addEnemy(Enemy e) {
		enemies.add(e);
	}

	/** recupera la bomba
	 * @return null si no hay
	 */
	public Bomba getBomba() {
		return bomba;
	}

	/** recupera la culumna de la celda
	 * @return col
	 */
	public int getCol() {
		return col;
	}

	/** recupera la pared destruible
	 * @return null si no hay
	 */
	public WallBox getDesWallBox() {
		return desWallBox;
	}

	/** recupera la lista de enemigos
	 * @return lista 
	 */
	public List<Enemy> getEnemies() {
		return enemies;
	}

	/** recupera el nombre de la celda
	 * @return name
	 */
	public String getName() {
		return name;
	}

	/** recupera la pared no destruible
	 * @return null si no hay
	 */
	public Elemento getNonDesWallBox() {
		return nonDesWallBox;
	}

	/** recupera el jugador
	 * @return null si no hay
	 */
	public Player getPlayer() {
		return player;
	}

	/** recupera un powerUp
	 * @return null si no hay
	 */
	public PowerUp getPowerUp() {
		return powerUp;
	}

	/** recupera la fila de la celda 
	 * @return row
	 */
	public int getRow() {
		return row;
	}

	/** determina si una celda esta vacia
	 * @return true si esta vacio 
	 */
	public boolean isEmpty() {

		return (desWallBox == null && nonDesWallBox == null && bomba == null);

	}

	/** determina si una celda esta vacia para un fantasma
	 * @return true si esta vacio
	 */
	public boolean isEmpty4g() {
		return (nonDesWallBox == null && bomba == null);
	}

	
	/** remueve un enemigo
	 * @param enemy
	 */
	public void removeEnemy(Enemy enemy) {
		enemies.remove(enemy);
	}

	/** agrega bomba
	 * @param bomba
	 */
	public void setBomba(Bomba bomba) {
		this.bomba = bomba;
	}

	/** agrega pared destruible
	 * @param desWallBox pared
	 */
	public void setDesWallBox(WallBox desWallBox) {
		this.desWallBox = desWallBox;
	}

	/** agrega pared no destruible
	 * @param nonDesWallBox
	 */
	public void setNonDesWallBox(WallBox nonDesWallBox) {
		this.nonDesWallBox = nonDesWallBox;
	}

	/** agrega jugador
	 * @param player
	 */
	public void setPlayer(Player player) {
		this.player = player;

	}

	/** agrega power up
	 * @param powerUp
	 */
	public void setPowerUp(PowerUp powerUp) {
		this.powerUp = powerUp;
	}

	@Override
	public String toString() {
		/*
		 * return name + " : " + " [" + desWallBox + "]" + " [" + nonDesWallBox
		 * + "]" + " [" + player + "]" + " [" + enemies + "]" + " [" + powerUp +
		 * "]" + " [" + bomba + "]";
		 */
		return name;
	}

}
